package com.dabai.qrtools.utils;


import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.DocumentsContract;

import androidx.annotation.RequiresApi;

import java.io.FileNotFoundException;

/**
 * SAF 文件操作工具类
 */
public class SAFUtils extends Activity {


    /**
     * 打开的文件
     * 通过 SAF 打开文件,回调 onActivityResult 之后再通过 读取方法读取内容.
     *
     * @param mime     类型
     * @param reqCode  回调码
     *                 SAF相关详情网页{@link "https://blog.csdn.net/fitaotao/article/details/112966577"}
     * @param activity 活动
     */
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public static void openFile(Activity activity, String mime,int reqCode) {
        //通过系统的文件浏览器选择一个文件
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        //筛选，只显示可以“打开”的结果，如文件(而不是联系人或时区列表)
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        //过滤只显示图像类型文件
        intent.setType(mime);
        activity.startActivityForResult(intent, reqCode);
    }

    /**
     * 保存文件
     * 通过 SAF 保存文件,回调 onActivityResult 之后再通过 写入方法写入内容.
     *
     * @param fileName 默认文件名
     * @param mime     类型
     * @param reqCode  回调码
     * @param activity 活动
     */
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public static void saveFile(Activity activity,String fileName, String mime,int reqCode) {

        Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
        // 只显示可以打开的文件
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType(mime);
        intent.putExtra(Intent.EXTRA_TITLE, fileName);

        activity.startActivityForResult(intent, reqCode);
    }


    /**
     * 直接删除文件
     *
     * @param context 上下文
     * @param uri     uri
     * @return boolean
     */
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public static boolean deleteFile(Context context,Uri uri) {
        if (uri != null) {
            try {
                DocumentsContract.deleteDocument(context.getContentResolver(), uri);
                return true;
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
        return false;
    }


    /**
     * 选择目录
     *
     * @param reqCode 申请代码
     */
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public static void selectDir(Activity context,int reqCode) {
        // 用户可以选择任意文件夹，将它及其子文件夹的读写权限授予APP。
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
        context.startActivityForResult(intent, reqCode);
    }

}
